package com.jjj.springmvc.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
/*
 * SpringMVC 中的Interceptor 是链式的调用的.
 * SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的。
 * 在SpringMVC 中定义一个Interceptor 非常简单，主要有两种方式，第一种方式是要定义的Interceptor类要实现了Spring 的HandlerInterceptor 接口，
 * 或者是这个类继承实现了HandlerInterceptor 接口的类，比如Spring 已经提供的实现了HandlerInterceptor 接口的抽象类HandlerInterceptorAdapter ；
 * 第二种方式是实现Spring的WebRequestInterceptor接口，或者是继承实现了WebRequestInterceptor的类。
 */
public class BaseInterceptor implements HandlerInterceptor{

	// 在DispatcherServlet之前执行 
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		System.out.println("************BaseInterceptor preHandle executed**********"); 
		return true;//当它返回为false 时，表示请求结束，后续的Interceptor 和Controller 都不会再执行
	}

	//在controller执行之后 ,在DispatcherServlet 进行视图返回渲染之前被调用
	//可以在这个方法中对Controller 处理之后的ModelAndView 对象进行操作
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		System.out.println("************BaseInterceptor postHandle executed**********"); 		
	}

	//在DispatcherServlet 渲染了对应的视图之后执行。主要作用是进行资源清理工作的
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		System.out.println("************BaseInterceptor afterCompletion executed**********"); 		
	}

}
